Repository navigation
fix(transferegov): download de anexos em lotes e LPG/PNAB primeiro - #140
Merged
Merged
Conversation
Em homologação o max_map_length é o padrão do Airflow (1024) e a buscar_ids_pendentes devolvia 3000 anexos para mapear um por task: o Airflow derrubava a task depois do return, nenhum download rodava e a anunciar_downloads (ALL_DONE) disparava a extracao_anexos_dag mesmo assim. Sem arquivo no MinIO, a extração terminava verde sem gravar, as tabelas relatorio_gestao.planilha_* nunca nasciam e as seis bronze_planilha_* da dbt_cosmos quebravam com "relation does not exist". Local não reproduz porque o compose sobe o limite para 15000. A task agora devolve lotes de 50 (60 tasks por rodada), como a salic_ingestion_trino e a extracao_anexos_dag já fazem. Cada lote baixa em sequência, então o max_active_tis_per_dag=3 segue limitando a três requisições simultâneas. Anexo que falha volta como pendente na próxima rodada; o lote só falha se todos os anexos dele falharem. LPG e PNAB passam na frente de `outros` antes do teto de 3000, porque só eles viram tabela na extração. O log da rodada passa a trazer a contagem por política.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Descrição
Em homologação, as seis
bronze_planilha_*dadbt_cosmosfalham em toda execução comrelation "relatorio_gestao.planilha_..." does not exist. A causa está duas DAGs antes, nadownload_anexos_transferegov_dag.O que acontecia:
buscar_ids_pendentesdevolvia até 3000 anexos para abaixar_e_salvar_anexosmapear, um por task.max_map_lengthé o padrão do Airflow, 1024. O Airflow recusava a expansão e derrubava abuscar_ids_pendentesdepois doreturn(no log, ela termina emDone. Returned value was: [...]).11378 anexos de planilha no staging, 0 já baixados.anunciar_downloads, que temtrigger_rule=ALL_DONE, disparava aextracao_anexos_dagmesmo assim. A extração encontrava0 anexos com arquivo baixado, terminava verde sem gravar nada, e as tabelasrelatorio_gestao.planilha_*nunca eram criadas.No ambiente local isso não aparece porque o
infra/docker-compose.ymlsobeAIRFLOW__CORE__MAX_MAP_LENGTHpara 15000.O que muda:
buscar_ids_pendentesdevolve lotes de 50 anexos: 3000 anexos viram 60 tasks, bem abaixo do limite de qualquer ambiente. É o mesmo padrão que asalic_ingestion_trinoe aextracao_anexos_dagjá usam. Cada lote baixa os anexos em sequência, então omax_active_tis_per_dag=3continua limitando a três requisições simultâneas à API.outros, e só depois entra o teto de 3000. Só essas duas políticas viram tabela na extração.outroscontinua sendo baixado, por último.(lpg N, pnab N, outros N).Issue relacionada
Nenhuma. A falha foi encontrada direto nos logs de homologação, sem issue aberta.
Tipo de mudança
Impacto em dados
Schemas e tabelas afetados:
raw/transferegov/anexos_arquivos/no MinIO passa a receber arquivos. Em consequência, as tabelasrelatorio_gestao.planilha_{contemplados,editais,dados}_{lpg,pnab_ciclo_1}são criadas pela extração, e as viewstransferegov.bronze_planilha_*passam a ser construídas. Nenhum schema ou coluna muda no código.Camada: raw → bronze
Precisa reexecutar alguma coisa depois do merge? Sim, nesta ordem:
download_anexos_transferegov_dag, limpar (Clear) abuscar_ids_pendentesda última execução, junto com as tasks seguintes. Assim ela roda de novo com a mesma cadeia de staging.extracao_anexos_dagdispara sozinha quando aanunciar_downloadstermina.dbt_cosmos.Com 11.378 anexos pendentes e teto de 3000 por rodada, o download completo leva cerca de 4 rodadas, cada uma de algumas horas.
Muda número que já está em uso? Não há número anterior para comparar: em homologação essas tabelas nunca existiram. As silvers e golds da Meta 3 que leem das bronzes de planilha passam a ter dado pela primeira vez.
Como testar
make test poetry run black --check dags/data_ingest/transferegov_fundo_a_fundo/download_anexos_dag.py poetry run ruff check dags/data_ingest/transferegov_fundo_a_fundo/download_anexos_dag.pyEm homologação, depois do Clear da
buscar_ids_pendentes, conferir:buscar_ids_pendentesfica verde e loga... nesta rodada em 60 lotes (lpg N, pnab N, outros N);baixar_e_salvar_anexos [ ]rodam;listar_anexos_pendentesdaextracao_anexos_dagloga mais de0 anexos com arquivo baixado;bronze_planilha_*_rundadbt_cosmosficam verdes.Evidências
Logs de homologação, rodada de 2026-10-29 15:54:
download_anexos_transferegov_dag→buscar_ids_pendentes:11378 anexos de planilha no staging, 0 já baixados, 3000 nesta rodada. A task fica vermelha e asbaixar_e_salvar_anexosaparecem como "Falha no upstream".extracao_anexos_dag→listar_anexos_pendentes:0 anexos com arquivo baixado: 0 a processar ...eNenhum anexo pendente de extração. Abaixar_e_extrairé pulada.dbt_cosmos→bronze_planilha_dados_lpg_run:relation "relatorio_gestao.planilha_dados_lpg" does not exist.A correção ainda não foi executada no Airflow, nem local nem em homologação.
Checklist
make lintlocalmente — ou justifiquei abaixo por que nãomake testlocalmente — ou justifiquei abaixo por que nãoschema.yml, se criei ou alterei modeloorigin/mainSobre o lint: o
make lintfalha no passo do black por causa de 45 arquivos que já estão fora do padrão namain; nenhum deles é o arquivo deste PR. Como a falha interrompe o alvo, rodei black, ruff e mypy só no arquivo alterado. Black e ruff passam. O mypy acusa 4 erros (imports deplugins/sem stub e umno-any-return), todos já presentes antes da mudança.Itens desmarcados: este PR não toca modelo dbt, então os itens de teste dbt e de
schema.ymlnão se aplicam. Também não há documentação afetada.make testpassa com 8127 testes, já sobre aorigin/mainatual, mas a DAG de download não tem teste próprio.